home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / Clean 1.2.4 / Small Demos / str_arit.icl < prev    next >
Encoding:
Text File  |  1996-02-23  |  1.0 KB  |  47 lines  |  [TEXT/3PRM]

  1. module str_arit
  2.  
  3. /*
  4. String Arithmetic.
  5.  
  6. This program demonstrates string arithmetic by mergesorting the characters of a large string.
  7. */
  8.  
  9. import StdEnv
  10.  
  11. //    *S is needed to create the large string. 
  12.  
  13. mul_S::Int String -> String
  14. mul_S 0 string =  ""
  15. mul_S n string =  string +++  mul_S (n-1) string 
  16.  
  17. //    The mergesort algorithm on strings.
  18.  
  19. MergeSort::String -> String
  20. MergeSort str
  21.     | len<=1    =     str
  22.     | otherwise    =     Merge (MergeSort first) (MergeSort second)
  23. where 
  24.     first    =    str%(0,middle - 1)
  25.     second    =    str%(middle,len - 1)
  26.     middle    =    len /2
  27.     len    =    size str
  28.  
  29. Merge::String String -> String
  30. Merge str  ""   =  str
  31. Merge ""   str  =  str
  32. Merge str1 str2
  33.     | ch1<ch2    =     ch1 +++  Merge (RemoveFirstChar str1) str2 
  34.     | otherwise    =     ch2 +++  Merge str1 (RemoveFirstChar str2) 
  35. where 
  36.     ch1    = str1%(0,0)
  37.     ch2    = str2%(0,0)
  38.                         
  39.  
  40. RemoveFirstChar::String -> String
  41. RemoveFirstChar string =  string%(1,size string-1)
  42.  
  43. //    The Start rule: sort a large string (30*40 characters).
  44.  
  45. Start::String
  46. Start     = MergeSort (mul_S 30 "Sort this garbage properly, please :-). ")
  47.